// Adapter/ActivityAdapter.java
package com.xxxy.ljh.myapplication.Adapter;

import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.ImageView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.bumptech.glide.Glide;
import com.xxxy.ljh.myapplication.R;
import com.xxxy.ljh.myapplication.activity.detail.ActivityDetailActivity;
import com.xxxy.ljh.myapplication.model.ActivityItem;

import java.util.ArrayList;
import java.util.List;

/**
 * 活动列表适配器类，用于在 RecyclerView 中展示活动项。
 * 负责将 ActivityItem 数据绑定到视图，并处理点击事件跳转至详情页面。
 */
public class ActivityAdapter extends RecyclerView.Adapter<ActivityAdapter.ViewHolder> {
    private Context context;
    private List<ActivityItem> activityList;

    /**
     * 构造方法，初始化上下文和活动数据列表。
     *
     * @param context      上下文对象，通常为调用该适配器的 Activity 或 Fragment 所属的上下文
     * @param activityList 活动项列表数据源，若传入 null 则会自动创建一个空列表
     */
    public ActivityAdapter(Context context, List<ActivityItem> activityList) {
        this.context = context;
        this.activityList = activityList != null ? activityList : new ArrayList<>();
    }

    /**
     * 创建 ViewHolder 实例，加载 item_activity 布局文件并返回新的 ViewHolder。
     *
     * @param parent   父容器 ViewGroup
     * @param viewType 视图类型（本例中未使用）
     * @return 新创建的 ViewHolder 实例
     */
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.item_activity, parent, false);
        return new ViewHolder(view);
    }

    /**
     * 将指定位置的数据绑定到对应的 ViewHolder 中的视图组件上。
     * 包括设置文本、图片以及注册点击监听器等操作。
     *
     * @param holder   当前要绑定数据的 ViewHolder
     * @param position 数据项在列表中的索引位置
     */
    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        ActivityItem item = activityList.get(position);

        // 绑定数据到视图组件
        if (holder.titleTextView != null) {
            holder.titleTextView.setText(item.getTitle() != null ? item.getTitle() : "");
        }

        if (holder.timeTextView != null) {
            holder.timeTextView.setText(item.getDateTime() != null ? item.getDateTime() : "");
        }

        if (holder.locationTextView != null) {
            holder.locationTextView.setText("地点: " + (item.getLocation() != null ? item.getLocation() : ""));
        }

        if (holder.descriptionTextView != null) {
            holder.descriptionTextView.setText(item.getDescription() != null ? item.getDescription() : "");
        }

        if (holder.participantsTextView != null) {
            holder.participantsTextView.setText("已报名: " + item.getParticipants() + "人");
        }

        if (item.getCoverImage() != null && !item.getCoverImage().isEmpty()) {
            // 使用 Glide 加载网络图片到 ImageView
            Glide.with(context).load(item.getCoverImage()).into(holder.activityLogo);
        } else {
            // 设置默认本地图片资源
            holder.activityLogo.setImageResource(R.drawable.circle_background);
        }

        // 注册点击事件：启动活动详情页并将当前活动对象传递过去
        holder.itemView.setOnClickListener(v -> {
            try {
                Intent intent = new Intent(context, ActivityDetailActivity.class);
                intent.putExtra("activity_item", item);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(intent);
            } catch (Exception e) {
                e.printStackTrace();
                Toast.makeText(context, "跳转失败: " + e.getMessage(),
                        Toast.LENGTH_SHORT).show();
            }
        });
    }

    /**
     * 获取数据集合大小，供 RecyclerView 内部计算 itemCount 使用。
     *
     * @return 当前活动列表的元素个数
     */
    @Override
    public int getItemCount() {
        return activityList.size();
    }

    /**
     * 更新数据集合并刷新界面显示。
     *
     * @param newList 新的活动项列表数据源，如果为 null 则替换为空列表
     */
    public void updateData(List<ActivityItem> newList) {
        this.activityList = newList != null ? newList : new ArrayList<>();
        notifyDataSetChanged();
    }

    /**
     * ViewHolder 类，持有 item_activity.xml 中各个控件的引用，
     * 提高列表滚动时的性能表现。
     */
    static class ViewHolder extends RecyclerView.ViewHolder {
        TextView titleTextView;
        TextView timeTextView;
        TextView locationTextView;
        TextView descriptionTextView;
        TextView participantsTextView;
        ImageView activityLogo;

        /**
         * ViewHolder 构造方法，通过 findViewById 初始化所有子视图引用。
         *
         * @param itemView 来自 item_activity.xml 的根布局视图
         */
        ViewHolder(View itemView) {
            super(itemView);
            // 初始化视图组件引用，与 item_activity.xml 中的 ID 对应
            titleTextView = itemView.findViewById(R.id.activity_name);
            timeTextView = itemView.findViewById(R.id.activity_time);
            locationTextView = itemView.findViewById(R.id.activity_address);
            descriptionTextView = itemView.findViewById(R.id.activity_description);
            participantsTextView = itemView.findViewById(R.id.activity_participants);
            activityLogo = itemView.findViewById(R.id.activity_logo);
        }
    }
}
